using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;

namespace PerlinNoise
{
    public abstract class AbstractPerlinNoise
    {
        protected class PerlinNoiseDimensionPack
        {
            private readonly double[] smoothWages;
            private readonly MethodInfo generateNoiseMethod;

            public PerlinNoiseDimensionPack(double[] _smoothWages, MethodInfo _generateNoiseMethod)
            {
                this.smoothWages = _smoothWages;
                this.generateNoiseMethod = _generateNoiseMethod;
            }

            public double[] SmoothWages
            {
                get { return this.smoothWages; }
            }

            public MethodInfo GenerateNoiseMethod
            {
                get { return this.generateNoiseMethod; }
            }
        }

        public abstract double perlinNoise1D(double x);
        public abstract double perlinNoise2D(double x, double y);
        public abstract double perlinNoise3D(double x, double y, double z);
        public abstract double perlinNoise4D(double x, double y, double z, double t);
    }
}
